/*
 * @Author: 一路向阳 tt_sunzhenfeng@163.com
 * @Date: 2024-02-22 14:59:36
 * @LastEditors: 一路向阳 tt_sunzhenfeng@163.com
 * @LastEditTime: 2024-02-22 15:09:17
 * @FilePath: \utils_ts\22.类修饰符.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
export {};
/**
 * 类里面，定义的属性，默认的修饰符都是：public，public修饰的属性和方法都可以在类的内部，类的外部，子类也可以访问
 * protected 受保护的 类里面，子类里面都可以访问，类的外面不能访问
 * private 私有的，只能在本类里面访问，子类和类的外面都不能访问
 * readonly  设置属性只读  不能被修改
 */

class Person {
  // protected myName: string;
  // private myName: string;
  // readonly myName: string;
  // static myName: string;  // 静态属性/成员，是给类使用，不能给实例使用
  myName: string;

  constructor(name: string) {
    this.myName = name;
  }

  getName() {
    return this.myName;
  }
};

class Male extends Person {
  age: number;

  constructor(name: string, age: number) {
    // 调用回父类的constructor，并把参数传进去
    super(name);
    this.age = age;
  }

  // 重写
  getName() {
    return this.myName + ' ' + this.age;
  }
}

let m = new Male('Jack', 18);
console.log(m.getName());
console.log(m.age);
console.log(m.myName);